package com.ce.pms.house.service;

import java.util.List;
import java.util.Map;

import com.ce.pms.base.service.IPmsBaseService;
import com.ce.pms.house.model.BuildingDomain;

import com.ce.pms.house.vo.BuildingVO;
import com.ce.pms.house.vo.CompanyVO;
import com.ce.pms.house.vo.ManageOrgVO;
import com.ce.pms.house.vo.PrecinctVO;
import com.sitechasia.webx.core.support.Page;

public interface IManageAreaService extends IPmsBaseService {
	/**
	 * 功能描述:根据管理区编号查询记录数<br>
	 * 注：新建判断管理区编号的唯一性时，oldCode传为null；修改判断管理区编号的唯一性时，则需要传入修改前的code<br>
	 * @param precinctCode
	 * @param oldCode
	 * @return
	 * Create author:胡煦
	 * Create on:2008-9-17
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public Long checkPrecinctByCode(String precinctCode,String oldCode);
	/**
	 * 方法描述: 查询所有收费管理区
	 * @author 胡煦
	 * Create on:2008-8-28
	 * @param
	 * @return List<PrecinctVO>
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public List<PrecinctVO> getAllChargePrecinct();
	/**
	 *
	 * 功能描述: 得到所有未被管理区引用的楼栋和被某个管理区引用的楼栋的集合
	 *
	 * @author 胡煦 Created on:2008-7-21
	 *
	 * 修改原因：
	 * @param
	 * @return List<BuildingDomain>
	 */
	public List<BuildingVO> getBuildingSet(Long precinctId);
	/**
	 *
	 * 功能描述: 得到被某个管理区引用的楼栋
	 *
	 * @author 胡煦
	 * Created on:2008-7-21
	 *
	 * 修改原因：
	 * @param
	 * @return List<BuildingDomain>
	 */
	public List<BuildingVO> getBuildingsBy(Long precinctId);
	/**
	 *
	 * 功能描述: 得到所有未被管理区引用的楼栋
	 *
	 * @author 胡煦
	 * Created on:2008-7-21
	 *
	 * 修改原因：
	 * @param
	 * @return List<BuildingVO>
	 */
	public List<BuildingVO> getBuildingIdsNotUse() ;
	/**
	 *
	 * 功能描述: 得到所有已被管理区引用的楼栋
	 *
	 * @author 胡煦
	 * Created on:2008-7-21
	 *
	 * 修改原因：
	 * @param
	 * @return List<BuildingDomain>
	 */
	public List<BuildingDomain> getBuildings();
	/**
	 * 方法描述: 根据物业管理处Id查询物业管理处VO
	 * @author 胡煦
	 * Create on:2008-7-9
	 * @param manageOrgId
	 * @return ManageOrgVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public ManageOrgVO findManageOrgById(Long manageOrgId);
	/**
	 * 功能描述:根据管理处名字查询记录数<br>
	 * 注：新建判断name的唯一性时，oldName传为null；修改判断name的唯一性时，则需要传入修改前的名字<br>
	 * @param manageOrgByName
	 * @param oldName
	 * @return
	 * Create author:胡煦
	 * Create on:2008-7-14
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public Long checkManageOrgByName(String manageOrgByName,String oldName);
	/**
	 * 功能描述:根据管理区名字查询记录数<br>
	 * 注：新建判断name的唯一性时，oldName传为null；修改判断name的唯一性时，则需要传入修改前的名字<br>
	 * @param precinctName
	 * @param oldName
	 * @return
	 * Create author:胡煦
	 * Create on:2008-7-14
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public Long checkPrecinctByName(String precinctName,String oldName);
	/**
	 * 方法描述: 查找所有物业公司基本资料
	 * @author 胡煦
	 * Create on:2008-7-9
	 * @param companyVO
	 * @return companyVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public List<CompanyVO> findAllCompany();
	/**
	 * 方法描述: 修改物业公司基本资料
	 * @author 胡煦
	 * Create on:2008-7-9
	 * @param companyVO
	 * @return companyVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public CompanyVO editCompany(CompanyVO companyVO);

	/**
	 * 方法描述: 新建管理处，必须基于某个物业公司
	 * @author 胡煦
	 * Create on:2008-7-9
	 * @param ManageOrgVO
	 * @return ManageOrgVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public ManageOrgVO addManageOrg(ManageOrgVO manageOrgVO);

	/**
	 * 方法描述: 修改管理处，必须基于某个物业公司
	 * @author 胡煦
	 * Create on:2008-7-9
	 * @param ManageOrgVO
	 * @return ManageOrgVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public ManageOrgVO editManageOrg(ManageOrgVO manageOrgVO);

	/**
	 * 方法描述: 删除管理处，必须基于某个物业公司
	 * @author 胡煦
	 * Create on:2008-7-9
	 * @param ManageOrgVO
	 * @return null
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public void deleteManageOrg(Long manageOrgId);
	/**
	 * 方法描述: 根据管理处ID分页查询其下所有管理区
	 * @author 胡煦
	 * Create on:2008-7-3
	 * @param qc
	 * @param pageNo
	 * @param pageSize
	 * @return page
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public Page queryPagePrecinct(Long id, int pageNo, int pageSize) ;
	/**
	 * 方法描述: 新建管理区，必须基于某个管理处
	 * @author 胡煦
	 * Create on:2008-7-9
	 * @param precinctVO
	 * @return precinctVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public PrecinctVO addPrecinct(PrecinctVO precinctVO);
	/**
	 * 方法描述: 修改管理区
	 * @author 胡煦
	 * Create on:2008-7-9
	 * @param precinctVO
	 * @return precinctVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public PrecinctVO editPrecinct(PrecinctVO precinctVO);


	/**
	 * 方法描述: 删除管理区
	 * @author 胡煦
	 * Create on:2008-7-9
	 * @param ManageOrgVO
	 * @return null
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public void deletePrecinct(Long precinctId);
	/**
	 * 方法描述: 根据物业公司Id查询物业公司VO
	 * @author 胡煦
	 * Create on:2008-7-9
	 * @param companyId
	 * @return CompanyVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public CompanyVO findCompanyById(Long companyId) ;

//	/**
//	 * 方法描述: CompanyDomain to CompanyVO
//	 * @author 胡煦
//	 * Create on:2008-7-8
//	 * @param CompanyDomain
//	 * @return CompanyVO
//	 * Edit author:
//	 * Edit on:
//	 * 修改原因：
//	 */
//	CompanyVO assembleD2V(CompanyDomain companyDomain);
//	/**
//	 * 方法描述: ManageOrgDomain to ManageOrgVO
//	 * @author 胡煦
//	 * Create on:2008-7-8
//	 * @param ManageOrgDomain
//	 * @return ManageOrgVO
//	 * Edit author:
//	 * Edit on:
//	 * 修改原因：
//	 */
//	private ManageOrgVO assembleD2V(ManageOrgDomain manageOrgDomain);
//
//	/**
//	 * 方法描述: ManageOrgVO to ManageOrgDomain
//	 * @author 胡煦
//	 * Create on:2008-7-8
//	 * @param ManageOrgDomain
//	 * @return ManageOrgVO
//	 * Edit author:
//	 * Edit on:
//	 * 修改原因：
//	 */
//	public ManageOrgDomain assembleV2D(ManageOrgVO manageOrgVO);

	/**
	 * 方法描述: 根据管理区Id查询管理区VO
	 * @author 胡煦
	 * Create on:2008-7-9
	 * @param precinctId
	 * @return PrecinctVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public PrecinctVO findPrecinctById(Long precinctId);

	/**
	 * 方法描述: 得到所有物业公司及其下的管理处的树列表。
	 * 将每一个物业公司和其下的管理处列表放入一个Map中，再将Map添加进一个列表，用于返回。
	 * @author 付湘辉
	 * Create on:2008-7-1
	 * @param
	 * @return List<Map>
	 * Edit author:胡煦
	 * Edit on:2008-7-7
	 * 修改原因：使之适合物业公司节点树
	 */
	public List<Map> queryCompanyManageOrgTreeList();
	/**
	 * 方法描述: 根据物业公司ID分页查询其下所有物业管理处
	 * @author 胡煦
	 * Create on:2008-7-3
	 * @param companyId
	 * @param pageNo
	 * @param pageSize
	 * @return page
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	 public Page queryPageManageOrg(Long companyId, int pageNo, int pageSize) ;
}
